package gcp.gui.modelos;

import gcp.Emprestimo;

import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;

import javax.swing.table.AbstractTableModel;

/**
 * EmprestimosDoUsuarioTableModel<br>
 * Modelo para criação de tabela que exibira os itens do usuario que foram
 * emprestados.
 * @author Catharine Quintans
 */
public class EmprestimosDoUsuarioTableModel extends AbstractTableModel {

    private static final long serialVersionUID = 1L;

    private List<Emprestimo> emprestimos;

    public static final int TITULO = 0;
    public static final int TIPO = 1;
    public static final int COM_QUEM_ESTA = 2;
    public static final int DATA_DE_EMPRESTIMO = 3;

    private SimpleDateFormat formatadorData;

    /**
     * Construtoir default.
     */
    public EmprestimosDoUsuarioTableModel() {
        emprestimos = new ArrayList<Emprestimo>();
        formatadorData = new SimpleDateFormat("dd/MM/yyyy");
    }

    /**
     * Retorna o numero de colunas da EmprestimosDoUsuarioTableModel.
     * @return Numero de colunas da EmprestimosDoUsuarioTableModel.
     */
    public int getColumnCount() {
        return 4;
    }

    /**
     * Retorna o numero de linhas da EmprestimosDoUsuarioTableModel.
     * @return Numero de linhas da EmprestimosDoUsuarioTableModel.
     */
    public int getRowCount() {
        return emprestimos.size();
    }

    /**
     * Retorna o valor da celula na posicao indicada na
     * EmprestimosDoUsuarioTableModel.
     * @param linha Numero da linha da EmprestimosDoUsuarioTableModel.
     * @param coluna Numero da coluna da EmprestimosDoUsuarioTableModel.
     * @return Valor da celula da EmprestimosDoUsuarioTableModel.
     */
    public Object getValueAt(int linha, int coluna) {
        Emprestimo emprestimo = get(linha);
        switch (coluna) {
        case TITULO:
            return emprestimo.getItem().getTitulo();
        case TIPO:
            return emprestimo.getItem().getClass().getSimpleName();
        case COM_QUEM_ESTA:
            return emprestimo.getEmprestadoA().getNome();
        case DATA_DE_EMPRESTIMO:
            return formatadorData.format(emprestimo.getDataDeEmprestimo());
        }
        return null;
    }

    /**
     * Retorna o nome da coluna indicada da EmprestimosDoUsuarioTableModel.
     * @param coluna Numero da coluna da EmprestimosDoUsuarioTableModel.
     * @return Nome da coluna da EmprestimosDoUsuarioTableModel.
     */
    @Override
    public String getColumnName(int coluna) {
        switch (coluna) {
        case TITULO:
            return "Titulo: ";
        case TIPO:
            return "Tipo: ";
        case COM_QUEM_ESTA:
            return "Com quem esta: ";

        case DATA_DE_EMPRESTIMO:
            return "Data do emprestimo: ";
        }
        return "";
    }

    /**
     * Retorna o Emprestimo da linha indicada na EmprestimosDoUsuarioTableModel.
     * @param linha Numero da linha na ColecionavelTableModel.
     * @return emprestimo Emprestimo da linha indicada peo Usuario.
     */
    public Emprestimo get(int linha) {
        return emprestimos.get(linha);
    }

    /**
     * Retorna a lista de emprestimos colecionaveis em exibicao na
     * EmprestimosDoUsuarioTableModel.
     * @return emprestimos Lista de iemprestimos do Usuario.
     */
    public List<Emprestimo> getEmprestimos() {
        return emprestimos;
    }

    /**
     * Define a lista de emprestimos a serem exibidos na
     * EmprestimosDoUsuarioTableModel.
     * @param emprestimos Lista de iemprestimos do Usuario.
     */
    public void setEmprestimos(List<Emprestimo> emprestimos) {
        this.emprestimos = emprestimos;
        // Avisa a interface que a lista de emprestimos foi alterada.
        fireTableDataChanged();
    }
}